#ifndef _BLUETOOTH_PERIPHERAL_SERVICE_H_
#define _BLUETOOTH_PERIPHERAL_SERVICE_H_

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include "bluetooth_board.h"

// 服务 UUID
#define PERIPHERAL_SERVICE_UUID                      0xFD88
// 资源 UUID
#define PERIPHERAL_CHARACTERISTIC_UUID               0xFF01
// 配置文件服务
#define PERIPHERAL_PROFILE_SERVICE                   (1ul)
// 资源 UUID 编码
#define PERIPHERAL_CHARACTERISTIC_ID                 (0ul)
// 特征长度
#define PERIPHERAL_CHARACTERISTIC_LENGTH             (MAX_BLUETOOTH_MTU_SIZE - 4)

typedef void(*ProfileWriteHandle_t)(const uint8_t *, uint16_t);

/**
 * @brief 设置 GATT 配置文件参数
 * 
 * @param Parameter - 配置文件编码
 * @param Length    - 写入数据长度
 * @param pDataIn   - 待写入的数据
 * @return uint8_t  - 操作状态
 */
extern uint8_t ProfileSetParameter(uint8_t Parameter, uint8_t Length, void *pDataIn);

/**
 * @brief 获取 GATT 配置文件参数
 * 
 * @param Parameter - 配置文件编码
 * @param pDataIn   - 输出的数据
 * @return uint8_t  - 操作状态
 */
extern uint8_t ProfileGetParameter(uint8_t Parameter, void *pDataOut);

/**
 * @brief 发送通知
 * 
 * @param ConnHandle    - 连接句柄
 * @param pNotifyHandle - 通知结构指针
 * @return uint8_t      - 操作状态
 */
extern uint8_t ProfileNotify(uint16_t ConnHandle, attHandleValueNoti_t *pNotifyHandle);

/**
 * @brief 注册 GATT 属性
 * 
 * @param WriteDataCallback - 写属性回调
 * @return uint8_t      - 操作状态
 */
extern uint8_t ProfileAddService(ProfileWriteHandle_t WriteDataCallback);

#endif
